<button class="layui-btn layui-btn-warm" id="DaiLianWanzi_autoCheckOrderButton">自动检测订单</button>

<!-- 自动检测取消订单模态框 -->
<div id="autoCheckCancelModal" style="display: none;">
    <div style="padding: 20px;">
        <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px;">
                <h3 style="margin: 0;">自动检测取消订单控制台</h3>
                <div style="display: flex; gap: 10px; align-items: center;">
                    <select id="consoleColorScheme" style="padding: 4px;">
                        <option value="light">浅色主题 (默认)</option>
                        <option value="dark">深色主题 (黑屏白字)</option>
                        <option value="highContrast">高对比度</option>
                    </select>
                </div>
            </div>

        <!-- 模拟控制台区域 -->
        <div id="checkCancelConsoleArea" style="
            height: 300px;
            border: 1px solid #e6e6e6;
            background-color: #f8f8f8;
            padding: 10px;
            overflow-y: auto;
            font-family: monospace;
            font-size: 14px;
            margin-bottom: 20px;
        "></div>

        <!-- 停止按钮 -->
        <div style="text-align: center;">
            <button id="stopAutoCheckBtn" class="layui-btn layui-btn-danger">停止自动检测</button>
        </div>
    </div>
</div>

<script>
    // 全局变量，存储模态框ID
    let DaiLianWanzi_checkModalInstance = null;
    // 全局变量，控制自动检测循环
    let DaiLianWanzi_autoCheckLoop = true;

    // 自动检测订单按钮点击事件
    document.querySelector('#DaiLianWanzi_autoCheckOrderButton').addEventListener('click', function() {
        window.DaiLianWanzi_Function_AutoCheckCancel();
    });

    /**
     * 向控制台输出日志信息
     * @param {string} level - 等级：警告、异常、正常
     * @param {string} message - 信息内容
     */
    window.DaiLianWanzi_logToConsole = function (level, message) {
        const consoleArea = document.getElementById('checkCancelConsoleArea');
        const now = new Date();
        const seconds = now.getSeconds().toString().padStart(2, '0');

        // 根据等级设置不同的颜色
        let color = '';
        switch (level) {
            case '警告':
                color = '#FF7F50'; // 橙色
                break;
            case '异常':
                color = '#FF4500'; // 红色
                break;
            case '正常':
                color = '#32CD32'; // 绿色
                break;
            default:
                color = '#000000'; // 黑色
        }

        // 创建日志条目
        const logEntry = document.createElement('div');
        logEntry.innerHTML = `[${seconds}][<span style="color: ${color};">${level}</span>]: ${message}`;

        // 添加到控制台并滚动到底部
        consoleArea.appendChild(logEntry);
        consoleArea.scrollTop = consoleArea.scrollHeight;
    };

    /**
     * 获取代练丸子订单列表
     * @returns {Array|null} 订单列表或null（获取失败时）
     */
    async function DaiLianWanzi_Function_GetOrders() {
        try {
            let response = await axios({
                url: "/api/dailianwanzi/get_order_list_v2",
                params: {
                    page: "1",
                    page_size: "100",
                    table_type: "101" // 参考接口文档，101表示进行中的订单
                }
            });
            
            if (response.data.code !== 0) {
                window.DaiLianWanzi_logToConsole('异常', '获取订单列表失败: ' + response.data.message);
                return null;
            }
            
            window.DaiLianWanzi_logToConsole('正常', '获取订单列表成功');
            
            // 检查返回数据结构
            if (!response.data.data || !response.data.data.order_list) {
                window.DaiLianWanzi_logToConsole('警告', '订单列表数据格式不正确');
                return [];
            }
            
            const orderList = response.data.data.order_list;
            window.DaiLianWanzi_logToConsole('正常', `获取到${orderList.length}个订单`);
            
            return orderList;
        } catch (error) {
            window.DaiLianWanzi_logToConsole('异常', `获取订单列表时发生错误: ${error.message}`);
            return null;
        }
    }

    // 检测订单是否存在,如果不存在就自动取消
    async function DaiLianWanzi_Function_CheckOrderExist(wangzi_id) {
        window.DaiLianWanzi_logToConsole('正常', `开始检测订单: ${wangzi_id}`);

        // 第一步: 根据代练丸子ID找到对应的代练通ID
        try {
            const response = await axios({
                url: "/api/order_v2/get/",
                params: {
                    order_id: wangzi_id
                }
            });
            
            if(response.data.code != 0) {
                window.DaiLianWanzi_logToConsole('异常', `获取代练通ID失败: ${response.data.message}`);
                return false;
            }
            
            // 第二步: 根据代练通ID查找对应的订单信息
            const dailiantong_order_info_response = await axios({
                url: "/api/dailiantong/check_order_exists/",
                params: {
                    order_id: response.data.data.dailiantong_order_id
                }
            });
            
            if(dailiantong_order_info_response.data.code == 0) {
                window.DaiLianWanzi_logToConsole('正常', `订单 ${wangzi_id} 在代练通仍存在`);
                return true;
            }
            
            // 订单不存在，取消代练丸子的订单
            window.DaiLianWanzi_logToConsole('警告', `订单 ${wangzi_id} 在代练通不存在，准备取消`);
            
            const cancel_response = await axios({
                url: "/api/dailianwanzi/cancel_order/",
                params: {
                    order_id: wangzi_id
                }
            });
            
            if(cancel_response.data.code != 0) {
                window.DaiLianWanzi_logToConsole('异常', `取消代练丸子订单失败: ${cancel_response.data.message}`);
                return false;
            }
            
            window.DaiLianWanzi_logToConsole('正常', `成功取消订单: ${wangzi_id}`);
            return true;
            
        } catch (error) {
            window.DaiLianWanzi_logToConsole('异常', `检测订单时出错: ${error.message}`);
            return false;
        }
    }

    /**
     * 自动检测并取消订单
     */
    window.DaiLianWanzi_Function_AutoCheckCancel = async function () {
        // 重置自动检测循环标志
        DaiLianWanzi_autoCheckLoop = true;
        
        // 关闭已存在的模态框
        if (DaiLianWanzi_checkModalInstance !== null) {
            layer.close(DaiLianWanzi_checkModalInstance);
        }

        // 获取模态框内容元素
        const modalContent = window.BS_Layui_$('#autoCheckCancelModal');

        // 打开新的模态框
        DaiLianWanzi_checkModalInstance = layer.open({
            type: 1,
            title: '自动检测取消订单进行中',
            content: modalContent,
            area: ['800px', '450px'],
            shade: 0.6,
            btn: [], // 不显示默认按钮
            cancel: function () {
                // 防止通过关闭按钮直接关闭模态框
                return false;
            }
        });

        // 清空控制台
        document.getElementById('checkCancelConsoleArea').innerHTML = '';

        // 输出开始日志
        window.DaiLianWanzi_logToConsole('正常', '开始自动检测取消订单流程');
        
        // 自动检测主循环
        while (DaiLianWanzi_autoCheckLoop) {
            try {
                // 获取订单列表
                let orders = await DaiLianWanzi_Function_GetOrders();
                if (orders === null || !DaiLianWanzi_autoCheckLoop) {
                    // 如果获取订单失败或已停止检测，等待5秒后重试
                    if (DaiLianWanzi_autoCheckLoop) {
                        window.DaiLianWanzi_logToConsole('警告', '将在5秒后重试...');
                        await new Promise(resolve => setTimeout(resolve, 5000));
                    }
                    continue;
                }
                
                // 如果没有订单
                if (orders.length === 0) {
                    window.DaiLianWanzi_logToConsole('正常', '当前没有需要检测的订单');
                    // 等待10秒后再次检测
                    if (DaiLianWanzi_autoCheckLoop) {
                        await new Promise(resolve => setTimeout(resolve, 10000));
                    }
                    continue;
                }
                
                // 处理每个订单
                for (const order of orders) {
                    // 检查是否停止检测
                    if (!DaiLianWanzi_autoCheckLoop) break;
                    
                    // 确保order_id存在
                    if (!order.order_id) {
                        window.DaiLianWanzi_logToConsole('警告', '发现无效订单数据，跳过');
                        continue;
                    }
                    
                    // 调用检测函数
                    await DaiLianWanzi_Function_CheckOrderExist(order.order_id);
                    
                    // 处理完一个订单后，等待3-8秒再处理下一个
                    const delayTime = Math.floor(Math.random() * 5000) + 3000; // 3000-8000毫秒
                    window.DaiLianWanzi_logToConsole('正常', `等待${delayTime/1000}秒后处理下一个订单`);
                    await new Promise(resolve => setTimeout(resolve, delayTime));
                }
                
                // 所有订单处理完成后，等待10秒再开始下一轮
                if (DaiLianWanzi_autoCheckLoop) {
                    window.DaiLianWanzi_logToConsole('正常', '本轮检测已完成，将在10秒后开始下一轮检测');
                    await new Promise(resolve => setTimeout(resolve, 10000));
                }
            } catch (error) {
                window.DaiLianWanzi_logToConsole('异常', `自动检测过程中发生错误: ${error.message}`);
                // 发生错误后，等待5秒再重试
                if (DaiLianWanzi_autoCheckLoop) {
                    await new Promise(resolve => setTimeout(resolve, 5000));
                }
            }
        }
    };

    /**
     * 停止自动检测
     */
    window.DaiLianWanzi_stopAutoCheck = function () {
        window.DaiLianWanzi_logToConsole('异常', '已点击停止自动检测');
        
        // 设置循环标志为false，停止自动检测循环
        DaiLianWanzi_autoCheckLoop = false;

        // 模拟停止检测的处理逻辑
        setTimeout(function () {
            window.DaiLianWanzi_logToConsole('正常', '正在终止所有检测进程');
            window.DaiLianWanzi_logToConsole('正常', '检测进程已全部终止');

            // 3秒后自动关闭模态框
            setTimeout(function () {
                if (DaiLianWanzi_checkModalInstance !== null) {
                    layer.close(DaiLianWanzi_checkModalInstance);
                    DaiLianWanzi_checkModalInstance = null;
                }
            }, 3000);
        }, 1000);
    };

    /**
             * 切换控制台颜色方案
             */
            function changeConsoleColorScheme() {
                const consoleArea = document.getElementById('checkCancelConsoleArea');
                const scheme = document.getElementById('consoleColorScheme').value;
                
                // 重置所有样式
                consoleArea.style.backgroundColor = '#f8f8f8';
                consoleArea.style.color = '#000000';
                consoleArea.style.borderColor = '#e6e6e6';
                
                // 应用选择的主题
                switch (scheme) {
                    case 'dark':
                        consoleArea.style.backgroundColor = '#000000';
                        consoleArea.style.color = '#ffffff';
                        consoleArea.style.borderColor = '#333333';
                        break;
                    case 'highContrast':
                        consoleArea.style.backgroundColor = '#1a1a1a';
                        consoleArea.style.color = '#ffff00';
                        consoleArea.style.borderColor = '#ffff00';
                        break;
                    case 'light':
                    default:
                        // 浅色主题已在重置时设置
                        break;
                }
            }

            // 添加颜色方案切换事件
            document.querySelector('#consoleColorScheme').addEventListener('change', function () {
                changeConsoleColorScheme();
            });

            // 停止自动检测按钮点击事件
            document.querySelector('#stopAutoCheckBtn').addEventListener('click', function () {
                window.DaiLianWanzi_stopAutoCheck();
            });


</script>